package objetosPersistentes;

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import Base.metodosSql;

import persistencia.Hibernate;

public class Carrera {

	int carreraNro;
	String fecha;
	List<Piloto> pilotos = new ArrayList<Piloto>();// 

	public void inicializarListaDePilotos() {
		Piloto piloto = new Piloto();
		ArrayList<Object> pilotosDeLaBAse;
		pilotosDeLaBAse = Hibernate.DameListaDeObjetos(
				"select numero from piloto", piloto);
		for (int i = 0; i < pilotosDeLaBAse.size(); i++)
			pilotos.add((Piloto) pilotosDeLaBAse.get(i));

	}

	String autodromoNombre;
	byte[] foto;

	public Carrera() {

	}

	public int getCarreraNro() {
		return carreraNro;
	}

	public void setCarreraNro(int carreraNro) {
		this.carreraNro = carreraNro;
	}

	public String getFecha() {
		return fecha;
	}

	public void setFecha(String fecha) {
		this.fecha = fecha;
	}

	public String getAutodromoNombre() {
		return autodromoNombre;
	}

	public void setAutodromoNombre(String autodromoNombre) {
		this.autodromoNombre = autodromoNombre;
	}

	public byte[] getFoto() {
		return foto;
	}

	public void setFoto(byte[] foto) {
		this.foto = foto;
	}

	public List<Piloto> getPilotos() {
		return pilotos;
	}

	public void setPilotos(List<Piloto> pilotos) {
		this.pilotos = pilotos;
	}

	

	// Me retorna un ArrayList Con los tres mejores clasificados
	public Piloto elMejorClasificado(List<Piloto> Pilotos) {
		Piloto p = Pilotos.get(0);
		int Tiempop = p.getTiempoClasificacion(); 
		for (int i = 1; i < Pilotos.size(); i++) { 
			int tiempoi = Pilotos.get(i).getTiempoClasificacion(); 
			if (tiempoi < Tiempop) {
				p = Pilotos.get(i); 				
				Tiempop = p.getTiempoClasificacion();
				
				 
			}
			
		}
		return p;

	}

	// Me retorna un ArrayList Con el podio de la carrera
	public ArrayList<Piloto> Elpodio(List<Piloto> pilotos) {
		ArrayList<Piloto> Mejores3 = new ArrayList<Piloto>();
		Piloto p = pilotos.get(0);
		int tiempo_p = p.getTiempoFinal();
		for (int i = 0; i < pilotos.size(); i++) {
			int tiempoi = pilotos.get(i).getTiempoFinal();
			if (tiempoi < tiempo_p) {
				p = pilotos.get(i);
				tiempo_p=p.getTiempoFinal();
			}
		}
		Mejores3.add(p);
		pilotos.remove(p);
		p = pilotos.get(0);
		int tiempo_p2 = p.getTiempoFinal();
		for (int i = 0; i < pilotos.size(); i++) {
			int tiempoi2 = pilotos.get(i).getTiempoFinal();
			if (tiempoi2 < tiempo_p2) {
				p = pilotos.get(i);
				tiempo_p2=p.getTiempoFinal();
			}
		}
		Mejores3.add(p);
		pilotos.remove(p);
		p = pilotos.get(0);
		int tiempo_p3 = p.getTiempoFinal();
		for (int i = 0; i < pilotos.size(); i++) {
			int tiempoi3 = pilotos.get(i).getTiempoFinal();
			if (tiempoi3 < tiempo_p3) {
				p = pilotos.get(i);
				tiempo_p3=p.getTiempoFinal();
			}
		}
		
		Mejores3.add(p);
		pilotos.remove(p);
		pilotos.addAll(Mejores3);

		return Mejores3;

	}

	public void Actualizar() {
		List<Piloto> pilotos = this.getPilotos();
		ArrayList<Piloto> mejores3 = this.Elpodio(pilotos);
		Rango_Puntos range = new Rango_Puntos();
		range.inicializarListaDeRangos();
		ArrayList<Rango_Puntos> aux = range.getRango();
		Piloto mejorclasif = elMejorClasificado(pilotos);
		mejorclasif.setPuntos(mejorclasif.getPuntos()+ aux.get(0).getPuntosPolePosition());
		Collections.sort(mejores3);
		mejores3.get(0).setPuntos(mejores3.get(0).getPuntos() + aux.get(0).getPuntosPrimero());
		mejores3.get(1).setPuntos(mejores3.get(1).getPuntos() + aux.get(0).getPuntosSegundo());
		mejores3.get(2).setPuntos(mejores3.get(2).getPuntos() + aux.get(0).getPuntosTercero());
		for (int i=0;i<pilotos.size();i++){
			pilotos.get(i).incrementarCarrerascorridas();
		
		}
		
		for(int i=0;i<pilotos.size();i++){
			pilotos.get(i).actualizarTiempos();
		}
	}
}
